Skip to content

Launch Open & Async (post live + buy-now CTAs)#1912

Merged
benbalter merged 7 commits into
mainfrom
launch-open-and-async
Jul 21, 2026
Merged

Launch Open & Async (post live + buy-now CTAs)#1912
benbalter merged 7 commits into
mainfrom
launch-open-and-async

Conversation

@benbalter

@benbalter benbalter commented Jul 19, 2026

Copy link
Copy Markdown
Owner

The book goes on sale July 21; open-and-async.com is pre-order until then. Nothing on the site gates on the post date, so the moment this merges the launch post publishes, every buy-now CTA goes live, the hero banner flips to "Out now," and the RSS/email broadcast fires. Merging early reproduces #1899 (buy-now live while the store is still pre-order). Keep as draft until launch day, then mark ready and merge.

What this does

Flips the site from pre-launch teaser → buy-now, as one coupled change (the post gate and the sitewide promos must ship together):

  • Launch post live2026-07-21-open-and-async.mdx: published: false → true.
  • Sitewide BookCta (homepage/about featured + inline-on-posts): "Coming July 21 / Get notified" → "Out now" / "Buy it — $9.99".
  • BookLaunchCta (the launch post's bespoke CTA): unchanged copy (already buy-now); buy links now carry a launch-post-specific utm_source.
  • RSS/email CTA (feed.xml.ts): same buy-now flip, with an email-specific utm_source.
  • Homepage hero banner (header.jpg): regenerated "COMING JULY 21, 2026" → "OUT NOW" from the marketing repo's banner generator (same design/dimensions).

Also folded in (from a blind design + marketing consult)

  • Attribution: per-surface utm_source in the existing site-wide benbalter-<surface> convention, so the launch post, everyday CTA, and email are each measurable (previously all collapsed to the generic source).
  • Accessibility: the featured card gets an aria-label (was a run-on accessible name) and all buy CTAs get a brand focus-visible ring.
  • Copy: the "cut" book-lineage headline reframed from rejection ("didn't make the final cut") toward abundance.

Verification

  • npm run check — 0 errors
  • feed unit test — pass (updated to assert the new email utm_source)
  • npm run build — pass; confirmed the now-published post renders with buy-now copy and the focus-visible utilities emit CSS

Out of scope

The marketing site itself (open-and-async.com) flips via its own launch runbook in ~/projects/open-and-async-site — this PR only touches ben.balter.com.

🤖 Generated with Claude Code

benbalter and others added 2 commits July 18, 2026 21:47
Launch day (July 21, 2026) is a coupled change: nothing gates on post
date, so the post going live and the sitewide promos flipping to buy-now
must ship together (shipping the CTA flip early caused #1899).

- Unhide the launch post (published: false → true).
- BookCta.astro: teaser → buy-now on both variants ("Out now" / "Buy it
  — bookPrice"), matching the marketing site and BookLaunchCta. Add a
  featured-card aria-label and brand focus-visible rings while there.
- BookLaunchCta.astro: buy links now use a launch-post-specific utm_source;
  add focus-visible rings.
- feed.xml.ts: same buy-now flip for the RSS/email CTA, with an email
  utm_source so that surface is measurable.
- config.ts: distinct per-surface utm_source (matching the site-wide
  benbalter-<surface> convention) so each buy surface is attributable.
- Reframe the "cut" book-lineage headline toward abundance.
- Regenerate the homepage hero banner (header.jpg) "COMING JULY 21, 2026"
  → "OUT NOW" from the marketing repo's banner generator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts:
#	src/components/BookCta.astro
@benbalter
benbalter marked this pull request as ready for review July 20, 2026 15:44
benbalter and others added 5 commits July 20, 2026 12:12
The featured card's aria-label did not contain the link's visible text,
tripping axe's label-content-name-mismatch and failing Lighthouse CI.
Remove the aria-label so the accessible name comes from content, as on main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The launch banner was regenerated at 1× (1000×379), halving the served
public/assets/img/header.jpg that the .hero-unit CSS background renders
directly (no srcset). On Retina displays that looked soft. Regenerate at
the design's native 2000×758 from the marketing banner generator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Convert 'Working from home ≠ working remotely.' and 'Stop digitizing
  the office. Start building something better.' to :quote directives so
  they render as shareable pull quotes.
- Drop 'today' from the title and TL;DR so they don't read stale after
  launch day.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The cover art is a 3D mockup on a transparent background with its own
baked-in drop shadow. rounded-md/shadow-lg (and the inline variant's
shadow-md) applied a second, rectangular CSS shadow to the image's
bounding box, rendering as a stray rounded card floating behind the
book. Drop the redundant utilities and rely on the mockup's own shadow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- TL;DR: make 'open-and-async.com' a link (rendered via marked, so inline
  markdown works) with the launch-post UTM.
- BookLaunchCta: same transparent-mockup fix as BookCta — drop
  rounded-md/shadow-2xl so the CSS box-shadow stops drawing a stray card
  behind the book; the mockup carries its own shadow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benbalter benbalter changed the title 🚀 DO NOT MERGE BEFORE JULY 21 — Launch Open & Async (post live + buy-now CTAs) Launch Open & Async (post live + buy-now CTAs) Jul 20, 2026
@benbalter
benbalter merged commit 95dee96 into main Jul 21, 2026
12 checks passed
@benbalter
benbalter deleted the launch-open-and-async branch July 21, 2026 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant